import { IAIService } from './AIService';
import { AIConfig, ConversationContext, EntityPersona } from './types';

// 模拟AI服务，用于开发测试和解决CORS问题
export class MockAIService implements IAIService {
  private config: AIConfig | null = null;
  private isReady = false;

  // 预定义的智能回复模板
  private responseTemplates: Record<string, string[]> = {
    cow: [
      '哞~ {message}让我想起了青草的味道。',
      '哞哞~ 你说得对，{weather}的天气很适合在草地上休息。',
      '我觉得{message}很有趣，哞~ 你还想聊什么吗？',
      '哞~ 作为一只牛，我对{message}有自己的看法呢。',
      '哞哞~ 在这个{timeOfDay}，听你说{message}真是不错。'
    ],
    pig: [
      '哼哼~ {message}？这让我想到了美味的食物！',
      '哼~ 你知道吗，{message}和找食物一样需要耐心。',
      '哼哼~ 在这个{timeOfDay}，{message}听起来很有趣！',
      '我虽然是只猪，但{message}我还是懂一些的，哼~',
      '哼哼~ {weather}的天气下，{message}确实值得思考。'
    ],
    sheep: [
      '咩~ {message}让我有点紧张，但也很好奇。',
      '咩咩~ 你说的{message}，我需要想想...安全吗？',
      '咩~ 在这个{timeOfDay}，{message}听起来很温和。',
      '我的毛告诉我，{message}是个好话题，咩~',
      '咩咩~ {weather}的天气让我想到{message}。'
    ],
    zombie: [
      '呃...{message}...让我想起了...生前的记忆...',
      '啊...{message}...我的脑子...有点混乱...',
      '呃呃...{timeOfDay}的时候...{message}...更清晰...',
      '我记得...{message}...但又忘记了...呃...',
      '呃...{weather}...让我想到{message}...很久以前...'
    ],
    skeleton: [
      '你提到的{message}，在我漫长的存在中见过无数次...',
      '死亡教会了我，{message}只是永恒中的一瞬...',
      '在这个{timeOfDay}，{message}让我思考存在的意义...',
      '{message}...时间会证明一切，正如我所见证的...',
      '我已经忘记了多少个{weather}的日子，但{message}让我想起...'
    ]
  };

  // 情境相关的回复
  private contextualResponses: Record<string, string[]> = {
    morning: ['早晨的阳光真好', '新的一天开始了', '晨露还在草叶上'],
    noon: ['正午的阳光很温暖', '这个时候最适合休息', '阳光照得我很舒服'],
    evening: ['黄昏时分很美', '夜晚就要来了', '晚霞很漂亮'],
    night: ['夜晚很安静', '星星出来了', '夜色中有种神秘感'],
    clear: ['天气真好', '阳光明媚', '清爽的天气'],
    rain: ['下雨了呢', '雨水很清凉', '雨天有种特别的感觉'],
    storm: ['暴风雨来了', '天气有点可怕', '雷声很响']
  };

  configure(config: AIConfig): void {
    this.config = config;
    this.isReady = true;
    console.log('Mock AI Service configured');
  }

  isConfigured(): boolean {
    return this.isReady;
  }

  async generateResponse(
    message: string, 
    context: ConversationContext,
    persona: EntityPersona
  ): Promise<string> {
    // 模拟网络延迟
    await this.delay(500 + Math.random() * 1000);

    const entityType = persona.entityType;
    const templates = this.responseTemplates[entityType] || this.responseTemplates.cow;
    
    // 选择一个随机模板
    const template = templates[Math.floor(Math.random() * templates.length)];
    
    // 替换模板中的变量
    let response = template
      .replace(/{message}/g, this.extractKeyword(message))
      .replace(/{timeOfDay}/g, context.gameContext.timeOfDay)
      .replace(/{weather}/g, context.gameContext.weather);

    // 添加情境相关的内容
    if (Math.random() < 0.3) {
      const contextKey = context.gameContext.timeOfDay;
      const contextResponses = this.contextualResponses[contextKey];
      if (contextResponses) {
        const contextResponse = contextResponses[Math.floor(Math.random() * contextResponses.length)];
        response += ` ${contextResponse}`;
      }
    }

    // 根据历史对话调整回复
    if (context.history.length > 0) {
      const lastMessage = context.history[context.history.length - 1];
      if (lastMessage.sender === 'player' && lastMessage.content.includes('你好')) {
        response = this.getGreeting(entityType) + ' ' + response;
      }
    }

    return response;
  }

  handleError(error: Error): string {
    console.warn('Mock AI Service error:', error);
    return '我现在有点困惑，请再说一遍好吗？';
  }

  // 提取消息中的关键词
  private extractKeyword(message: string): string {
    const keywords = message.split(/\s+/).filter(word => word.length > 1);
    if (keywords.length === 0) return '这个话题';
    
    // 返回第一个有意义的词，或者整个消息的简化版本
    const keyword = keywords[0];
    return keyword.length > 10 ? '你说的话' : keyword;
  }

  // 获取问候语
  private getGreeting(entityType: string): string {
    const greetings: Record<string, string> = {
      cow: '哞~ 你好！',
      pig: '哼哼~ 你好！',
      sheep: '咩~ 你好...',
      zombie: '呃...你好...人类...',
      skeleton: '又见面了，生者...'
    };
    return greetings[entityType] || '你好！';
  }

  // 模拟延迟
  private delay(ms: number): Promise<void> {
    return new Promise(resolve => setTimeout(resolve, ms));
  }

  // 获取配置（调试用）
  getConfig(): AIConfig | null {
    return this.config;
  }
}

// 导出模拟AI服务实例
export const mockAIService = new MockAIService();